package helloword;

import com.rabbitmq.client.*;
import org.junit.Test;
import utils.RabbitMQUtils;

import java.io.IOException;

/**
 * @author lucine
 * @version 1.0 2021/6/17 16:09
 */
public class Customer {



    /**
     * 消费消息  , 不使用junit运行，因为运行完毕会直接关闭，不能一直监听
     */
    public static void main(String[] args) throws Exception {

//        //创建连接mq的连接工厂对象
//        ConnectionFactory connectionFactory = new ConnectionFactory();
//        //设置连接rabbitmq主机
//        connectionFactory.setHost("127.0.0.1");
//        //设置端口号
//        connectionFactory.setPort(5672);
//        //设置连接的虚拟主机
//        connectionFactory.setVirtualHost("/ems");
//        //设置访问虚拟主机的用户名
//        connectionFactory.setUsername("ems");
//        //设置访问虚拟主机的密码
//        connectionFactory.setPassword("ems");
//
//        //获取连接对象
//        Connection connection = connectionFactory.newConnection();
        Connection connection = RabbitMQUtils.getConnection();

        //通道绑定对应消息队列
        Channel channel = connection.createChannel();

        //通道绑定对象
        channel.queueDeclare("hello",false,false,false,null);

        //消费消息
        //参数1：消费哪个队列的消息
        //参数2：开启消息的自动确认机制
        //参数3：消费时的回调接口
        channel.basicConsume("hello",true, new DefaultConsumer(channel){

            //最后一个参数是消息队列中的消息
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("new String(body)"+ new String(body));
            }
        });
        //不关闭的话会一直监听，也可能消费消息后，进程结束了不能打印(上面handleDelivery)方法中的打印
//        RabbitMQUtils.cloneConnectionAndChannel(channel,connection);
//        channel.close();
//        connection.close();


    }
}
